test.js ➔ describe(ꞌfsnip testsꞌ)   A
last analyzed

Complexity

Conditions 3
Paths 4

Size

Total Lines 22

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 3
c 1
b 0
f 0
nc 4
nop 0
dl 0
loc 22
rs 9.2

1 Function

Rating   Name   Duplication   Size   Complexity  
A test.js ➔ ... ➔ it 0 8 1
1
/* global describe, it */
2
3
const assert = require('assert')
4
const {exec} = require('child_process')
5
const fs = require('fs')
6
const path = require('path')
7
const {minimizeJsonProperty} = require('../dist/jsonSnip.js')
8
const {setInputType} = require('../dist/commonFuncs.js')
9
10
const tests = [
11
  {name: 'Simple 1', cmd: 'fsnip ./demo.json', resultFile: 'simple1.txt'},
12
  {name: 'Simple 2', cmd: 'fsnip ./demo.json --json', resultFile: 'simple2.txt'},
13
  {name: 'Simple 3', cmd: 'fsnip ./demo.json  \t    --json', resultFile: 'simple3.txt'},
14
  {name: 'Prettify 1', cmd: 'fsnip ./demo.json --prettify', resultFile: 'prettify1.txt'},
15
  {name: 'Prettify 2', cmd: 'fsnip ./demo.json --prettify 2 infinity', resultFile: 'prettify2.txt'},
16
  {name: 'Prettify 3', cmd: 'fsnip ./demo.json --prettify 3 0', resultFile: 'prettify3.txt'},
17
  {name: 'Prettify 4', cmd: 'fsnip ./demo.json --prettify 3 45 true', resultFile: 'prettify4.txt'},
18
  {name: 'Prettify 5', cmd: 'fsnip ./demo.json --prettify 3 45 300', resultFile: 'prettify5.txt'},
19
  {name: 'Ellipsify 1', cmd: 'fsnip ./demo.json --ellipsify method', resultFile: 'ellipsify1.txt'},
20
  {name: 'Ellipsify 2', cmd: 'fsnip ./demo.json --ellipsify', resultFile: 'ellipsify2.txt'},
21
  {name: 'Snip', cmd: 'fsnip ./demo.json --snip $..currentRadius', resultFile: 'snip.txt'},
22
  {name: 'Snip 2', cmd: 'fsnip ./demo.json --snip "\'$..currentRadius\'"', resultFile: 'snip.txt'},
23
  {name: 'Complex 1', cmd: 'fsnip ./demo.json --snip notifications --ellipsify gnss currentRadius ~method ~state ~message', resultFile: 'complex1.txt'},
24
  {name: 'Complex 2', cmd: 'fsnip ./demo.json --snip navigation --ellipsify gnss ~method ~state ~message --ellipsify currentRadius ~"\'\\$source\'"', resultFile: 'complex2.txt'},
25
  {name: 'delKeys', cmd: 'fsnip ./demo.json --ellipsify $ ~vessels --delKeys navigation --ellipsify uuid', resultFile: 'delKeys.txt'},
26
  {name: 'delKeys 2', cmd: 'fsnip ./demo.json --delKeys $..method[0]', resultFile: 'delKeys2.txt'},
27
  {name: 'delKeys 3', cmd: 'fsnip ./demo.json --delKeys "\'$..method[0]\'"', resultFile: 'delKeys2.txt'},
28
  {name: 'Snip error 1', cmd: 'fsnip ./demo.json --snip', resultFile: 'snipError1.txt'},
29
  {name: 'Snip error 2', cmd: 'fsnip ./demo.json --snip navigation 2', resultFile: 'snipError2.txt'},
30
  {name: 'Snip error 3', cmd: 'fsnip ./demo.json --snip navigation -2', resultFile: 'snipError3.txt'},
31
  {name: 'Snip error 4', cmd: 'fsnip ./demo.json --snip navigation Fred', resultFile: 'snipError4.txt'},
32
  {name: 'Invalid 1', cmd: 'fsnip ./demo.json --notacmd', resultFile: 'invalid1.txt'},
33
  {name: 'Invalid 2', cmd: 'fsnip ./demo.json --snip navigation --from method', resultFile: 'invalid2.txt'},
34
  {name: 'Invalid 3', cmd: 'fsnip ./demo.json navigation', resultFile: 'invalid3.txt'},
35
  {name: 'Invalid 4', cmd: 'fsnip ./demo.json --from vessels --json', resultFile: 'invalid4.txt'},
36
  {name: 'Invalid 5', cmd: 'fsnip ./demo.json --from vessels --prettify', resultFile: 'invalid5.txt'},
37
  {name: 'Invalid 6', cmd: 'fsnip ./demo.json --from vessels --ellipsify method', resultFile: 'invalid6.txt'},
38
  {name: 'Invalid 7', cmd: 'fsnip ./demo.json --from vessels --snip notifications', resultFile: 'invalid7.txt'},
39
  {name: 'Invalid 8', cmd: 'fsnip ./demo.json --from vessels --delKeys $..method[0]', resultFile: 'invalid8.txt'},
40
  {name: 'Invalid 9', cmd: 'fsnip ./demo.json --delKeys $..method[0] --from vessels', resultFile: 'invalid9.txt'},
41
  {name: 'Invalid 10', cmd: 'fsnip ./demo.json --delKeys $..method[0] --to vessels', resultFile: 'invalid10.txt'},
42
  {name: 'Text 1', cmd: 'fsnip ./demo.txt --from "\'#loc1_start\'"', resultFile: 'text1.txt'},
43
  {name: 'Text 1a', cmd: 'fsnip ./demo.txt --from \'"#loc1_start"\'', resultFile: 'text1.txt'},
44
  {name: 'Text 2', cmd: 'fsnip ./demo.txt --start "\'#loc1_start\'"', resultFile: 'text2.txt'},
45
  {name: 'Text 3', cmd: 'fsnip ./demo.txt --to "\'#loc1_end\'"', resultFile: 'text3.txt'},
46
  {name: 'Text 4', cmd: 'fsnip ./demo.txt --finish "\'#loc1_end\'"', resultFile: 'text4.txt'},
47
  {name: 'Text 5', cmd: 'fsnip ./demo.txt --finish "\'#loc1_end\'" 2', resultFile: 'text5.txt'},
48
  {name: 'Text 6', cmd: 'fsnip ./demo.txt --finish "\'#loc1_end\'" -2', resultFile: 'text6.txt'},
49
  {name: 'Text 7', cmd: 'fsnip ./demo.txt --finish "\'#loc1_end\'" 3', resultFile: 'text7.txt'},
50
  {name: 'Text 8', cmd: 'fsnip ./demo.txt --finish "\'#loc1_end\'" 2 3', resultFile: 'text8.txt'},
51
  {name: 'Text 9', cmd: 'fsnip ./demo.txt --finish "\'#loc1_end\'" fred', resultFile: 'text9.txt'},
52
  {name: 'Text 10', cmd: 'fsnip ./demo.txt --finish "\'#loc1_end\'" fred bert', resultFile: 'text10.txt'},
53
  {name: 'Text 11', cmd: 'fsnip ./demo.txt --start "\'#loc1_end\'" -2', resultFile: 'text11.txt'},
54
  {name: 'Text 12', cmd: 'fsnip ./demo.txt --start "\'#loc1_end\'" 3', resultFile: 'text12.txt'},
55
  {name: 'Text 13', cmd: 'fsnip ./demo.txt --start "\'#loc1_end\'" 2 3', resultFile: 'text13.txt'},
56
  {name: 'Text 14', cmd: 'fsnip ./demo.txt --start "\'#loc1_end\'" fred', resultFile: 'text14.txt'},
57
  {name: 'Text 15', cmd: 'fsnip ./demo.txt --start "\'#loc1_end\'" fred bert', resultFile: 'text15.txt'},
58
  {name: 'Text 16', cmd: 'fsnip ./demo.txt --start "\'this text\'"', resultFile: 'text16.txt'},
59
  {name: 'Text 17', cmd: 'fsnip ./demo.txt --from "\'#loc1_end\'" fred', resultFile: 'text17.txt'},
60
  {name: 'Text 18', cmd: 'fsnip ./demo.txt --to "\'#loc1_end\'" fred', resultFile: 'text18.txt'},
61
  {name: 'Help', cmd: 'fsnip --help', resultFile: 'help.txt'},
62
  {name: 'Tricky 1', cmd: 'fsnip ./test/tricky.json --ellipsify address ~housename', resultFile: 'tricky1.txt'},
63
  {name: 'Tricky 2', cmd: 'fsnip ./test/tricky.json --ellipsify address ~"\'street name\'"', resultFile: 'tricky2.txt'},
64
  {name: 'Tricky 3', cmd: 'fsnip ./test/tricky.json --ellipsify address ~"\'~post code\'"', resultFile: 'tricky3.txt'},
65
  {name: 'Dollar 1', cmd: 'fsnip ./test/dollar1.json --ellipsify "\'$..[\'\\$source\']\'"', resultFile: 'dollar1.txt'}
66
]
67
68
const errorTests = [
69
  {name: 'Error 1', cmd: 'fsnip ./fred.fred --snip navigation', stderr: 'unable to read file \'./fred.fred\'\n'},
70
  {name: 'Error 2', cmd: 'fsnip ./fred.fred --snip', stderr: 'unable to read file \'./fred.fred\'\n'},
71
  {name: 'Error 3', cmd: 'fsnip ./fred.fred', stderr: 'unable to read file \'./fred.fred\'\n'},
72
  {name: 'Error 4', cmd: 'fsnip', stderr: 'Unrecognised arguments passed to fsnip. See fsnip --help\n'}
73
]
74
75
describe('unit tests', function () {
76
  it('setInputType 1', function () {
77
    assert.equal(setInputType({}, 'invalidType'), false)
78
  })
79
  it('setInputType 2', function () {
80
    assert.equal(setInputType({}, ''), false)
81
  })
82
  it('setInputType 3', function () {
83
    assert.equal(setInputType({type: ''}, ''), false)
84
  })
85
  it('setInputType 4', function () {
86
    assert.equal(setInputType({type: 'something'}, 'somethingElse'), false)
87
  })
88
  it('minimizeJsonProperty', function () {
89
    let testJson = {'first': true}
90
    minimizeJsonProperty(testJson, 'first')
91
    assert.deepEqual(testJson, {'first': true})
92
  })
93
})
94
95
describe('fsnip tests', function () {
96
  for (let i = 0; i < tests.length; i++) {
97
    it(tests[i].name, function (done) {
98
      this.timeout(8000)
99
      exec(tests[i].cmd, function (error, stdout) {
100
        assert.ifError(error)
101
        assert.equal(stdout.toString(), fs.readFileSync(path.resolve('./test/', tests[i].resultFile)).toString())
102
        done()
103
      })
104
    })
105
  }
106
  for (let i = 0; i < errorTests.length; i++) {
107
    it(errorTests[i].name, function (done) {
108
      this.timeout(8000)
109
      exec(errorTests[i].cmd, function (error, stdout, stderr) {
110
        assert.ifError(error)
111
        assert.equal(stderr.toString(), errorTests[i].stderr)
112
        done()
113
      })
114
    })
115
  }
116
})
117